package com.test.error;

import com.test.demo.entity.User;
import com.test.demo.repository.UserRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.server.ResponseStatusException;

import javax.servlet.http.HttpServletResponse;

/**
 * 出色的原型制作：我们可以快速实施基本解决方案。
 * 一种类型，多种状态代码：一种异常类型可以导致多种不同的响应。与@ExceptionHandler相比，这减少了紧密耦合。
 * 我们将不必创建那么多的自定义异常类。
 * 由于可以通过编程方式创建异常，因此我们对异常处理有了更多的控制
 */
public class ResponseStatusExceptionDemo {

    @Autowired
    private UserRepository userRepository;

    @GetMapping(value = "/{id}")
    public User findById(@PathVariable("id") Long id, HttpServletResponse response) {
        try {
//            User resourceById = RestPreconditions.checkFound(userRepository.findOne(id));

//            eventPublisher.publishEvent(new SingleResourceRetrievedEvent(this, response));
            return null;
        }
        catch (MyResourceNotFoundException exc) {
            throw new ResponseStatusException(
                    HttpStatus.NOT_FOUND, "Foo Not Found", exc);
        }
    }
}
